Maps are one of the most common and useful data visualisation tools in an ecologist’s tool belt. Making a quick and simple map of species observations is especially useful when first investigating where a species has occurred. Viewing locations of points can also help to understand the extent of your data (and spot possible errors or outliers).
In this post, we will use either Python or R to make a map of observations of Peron’s tree frog (Litoria peronii) in New South Wales since 2018 recorded by FrogID.
Download data
Peron’s Tree frog is one of the most recorded frog species in the Atlas of Living Australia. Growing up to 7cm in length, it is well-known for its eyes which often look like they have a black cross on them!
Left: Litoria peronii (Giverny CC-BY-NC 4.0 (Int), Middle: Litoria peronii (debtaylor142 CC-BY-NC 4.0 (Int)), Right: Litoria peronii (Ernst Weiher, iNaturalist CC-BY-NC 4.0 (Int))
First, let’s import galah-python.
import galahSearch for taxa
When trying to download data about any species or clade, we can search using search_taxa(). It’s recommended to use search_taxa() to check whether a taxonomic search returns what you were expecting (even if you know the scientific name)! We can check taxonomic information about Peron’s tree frog with search_taxa(), which returns extra details about the species when a match is found.
galah.search_taxa("Litoria peronii") scientificName scientificNameAuthorship ... vernacularName issues
0 Litoria peronii (Tschudi, 1838) ... Peron's Tree Frog noIssue
[1 rows x 12 columns]
Search for fields
Next, we can search for fields and field IDs for filtering our query. In this case, we are interested in filtering to a specific year, state/territory and data resource.
We can start by searching for any fields containing the word “year” using search_all().
galah.search_all(
fields="year"
) id description type link
0 year The year in which an occurrence was observed. ... field https://github.com/AtlasOfLivingAustralia/ala-...
1 endDayOfYear http://rs.tdwg.org/dwc/terms/endDayOfYear field NaN
2 datePrecision The precision of the date information for the ... field NaN
3 occurrenceYear Year ranges for a search. Calculated based on ... field NaN
4 startDayOfYear http://rs.tdwg.org/dwc/terms/startDayOfYear field NaN
5 namePublishedInYear http://rs.tdwg.org/dwc/terms/namePublishedInYear field NaN
We can do the same kind of search to find fields with information of australian states/territories and data resource names.
galah.search_all(
fields="states"
) id description type link
0 cl22 Australian States and Territories Australian S... layers
1 cl927 States including coastal waters States (includ... layers
2 cl2013 ASGS Australian States and Territories Austral... layers
3 cl10902 Forests of Australia (2013) v2.0 Forests of Au... layers
4 cl10903 Tenure of Australia's forests (2013) v2.0 Tenu... layers
5 cl10925 PSMA States (2016) Australian State boundaries layers
6 cl10930 NRM Regions 2017 The Natural Resource Manageme... layers
galah.search_all(
fields="dataresourcename"
) id description type link
0 dataResourceUid A list (concatenated and separated) of prepara... field NaN
1 dataResourceName The data resource that supplies the record. Th... field NaN
2 raw_dataResourceUid NaN field NaN
3 raw_dataResourceName NaN field NaN
If you are ever uncertain which field ID to choose, you can use show_values() to see what possible values are within a field. For example, let’s see what values are in field ID cl22.
galah.show_values(field="cl22") field category
0 cl22 New South Wales
1 cl22 Victoria
2 cl22 Queensland
3 cl22 South Australia
4 cl22 Western Australia
5 cl22 Northern Territory
6 cl22 Tasmania
7 cl22 Australian Capital Territory
8 cl22 Unknown1
9 cl22 Coral Sea Islands
10 cl22 Ashmore and Cartier Islands
We can also search for a value using search_values(), which might be handy to check that “FrogID” is a value in dataResourceName.
galah.search_values(field="dataResourceName") field category
0 dataResourceName FrogID
Download observations
Now we are ready to build our query to download observations of Peron’s tree frog since 2018 in New South Wales by FrogID.
First, let’s find the number of records that match our query. This is good practice before downloading occurrence records because you can check exactly how many records you are intending to download (and avoid an accidentally massive download)!
We’ll use atlas_counts() to download record counts, specifying the taxon using the taxa argument, and narrowing the year range, state/territory and data resource using the filters argument.
galah.atlas_counts( # *Download record counts*
taxa="litoria peronii", # *of Peron's tree frog*
filters=["year>=2018", # *since 2018*
"cl22=New South Wales", # *in New South Wales*
"dataResourceName=FrogID"] # *by FrogID*
) totalRecords
0 27969
Now we can use atlas_occurrences() to download occurrence records, which returns each observation’s location coordinates and event date.
You will need to first provide a registered email with the ALA using galah_config() before retrieving records.
galah.galah_config(email = "your-email-here")
frogs = galah.atlas_occurrences(
taxa="litoria peronii",
filters=["year>=2018",
"cl22=New South Wales",
"dataResourceName=FrogID"]
)
frogs recordID catalogNumber taxonConceptID scientificName raw_vernacularName scientificName.1 taxonRank vernacularName kingdom phylum class order family genus species subspecies dataResourceUid institutionUid institutionName collectionUid collectionName dcterms:license institutionCode collectionCode raw_locality raw_decimalLatitude raw_decimalLongitude raw_geodeticDatum decimalLatitude decimalLongitude coordinatePrecision coordinateUncertaintyInMeters country stateProvince cl959 cl21 cl1048 minimumElevationInMeters maximumElevationInMeters minimumDepthInMeters maximumDepthInMeters individualCount recordedBy year month day eventDate raw_basisOfRecord basisOfRecord occurrenceStatus raw_sex preparations informationWithheld dataGeneralizations spatiallyValid
0 0008c41d-fd35-421a-9976-8213ade88ba8 NaN https://biodiversity.org.au/afd/taxa/c584f24b-... Litoria peronii NaN Litoria peronii species Peron's Tree Frog Animalia Chordata Amphibia Anura Hylidae Litoria Litoria peronii NaN dr14760 NaN NaN NaN NaN CC-BY-NC 4.0 (Int) NaN NaN NaN -33.233900 151.533000 NaN -33.233900 151.533000 NaN 3.90 Australia New South Wales Wyong (A) NaN Sydney Basin NaN NaN NaN NaN NaN 15731 2020 12 15 2020-12-15T00:00:00Z Occurrence OCCURRENCE PRESENT male NaN NaN NaN True
1 000c1c20-bec3-4fc3-8d65-3de76961a998 NaN https://biodiversity.org.au/afd/taxa/c584f24b-... Litoria peronii NaN Litoria peronii species Peron's Tree Frog Animalia Chordata Amphibia Anura Hylidae Litoria Litoria peronii NaN dr14760 NaN NaN NaN NaN CC-BY-NC 4.0 (Int) NaN NaN NaN -32.969000 150.109000 NaN -32.969000 150.109000 NaN 39.56 Australia New South Wales Lithgow (C) NaN NSW South Western Slopes NaN NaN NaN NaN NaN 9150 2019 1 13 2019-01-13T00:00:00Z Occurrence OCCURRENCE PRESENT male NaN NaN NaN True
2 000e46ad-9ace-437c-ac31-48843f603c9c NaN https://biodiversity.org.au/afd/taxa/c584f24b-... Litoria peronii NaN Litoria peronii species Peron's Tree Frog Animalia Chordata Amphibia Anura Hylidae Litoria Litoria peronii NaN dr14760 NaN NaN NaN NaN CC-BY-NC 4.0 (Int) NaN NaN NaN -31.274928 149.268973 NaN -31.274928 149.268973 NaN 4.82 Australia New South Wales Warrumbungle Shire (A) NaN Brigalow Belt South NaN NaN NaN NaN NaN 39399 2021 10 28 2021-10-28T00:00:00Z Occurrence OCCURRENCE PRESENT male NaN NaN NaN True
3 001229c0-4c48-486f-8d5d-5ddfe7420756 NaN https://biodiversity.org.au/afd/taxa/c584f24b-... Litoria peronii NaN Litoria peronii species Peron's Tree Frog Animalia Chordata Amphibia Anura Hylidae Litoria Litoria peronii NaN dr14760 NaN NaN NaN NaN CC-BY-NC 4.0 (Int) NaN NaN NaN -33.736176 150.381621 NaN -33.736176 150.381621 NaN 4.69 Australia New South Wales Blue Mountains (C) NaN Sydney Basin NaN NaN NaN NaN NaN 33079 2021 10 28 2021-10-28T00:00:00Z Occurrence OCCURRENCE PRESENT male NaN NaN NaN True
4 0014b8ff-ddd5-4a24-b7ee-cb57c62ba2d2 NaN https://biodiversity.org.au/afd/taxa/c584f24b-... Litoria peronii NaN Litoria peronii species Peron's Tree Frog Animalia Chordata Amphibia Anura Hylidae Litoria Litoria peronii NaN dr14760 NaN NaN NaN NaN CC-BY-NC 4.0 (Int) NaN NaN NaN -33.366973 151.362492 NaN -33.366973 151.362492 NaN 4.00 Australia New South Wales Wyong (A) NaN Sydney Basin NaN NaN NaN NaN NaN 18013 2018 11 10 2018-11-10T00:00:00Z Occurrence OCCURRENCE PRESENT male NaN NaN NaN True
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
27964 fff85846-94f6-4285-b520-219a574beaa6 NaN https://biodiversity.org.au/afd/taxa/c584f24b-... Litoria peronii NaN Litoria peronii species Peron's Tree Frog Animalia Chordata Amphibia Anura Hylidae Litoria Litoria peronii NaN dr14760 NaN NaN NaN NaN CC-BY-NC 4.0 (Int) NaN NaN NaN -33.759252 151.148317 NaN -33.759252 151.148317 NaN 50.00 Australia New South Wales Ku-ring-gai (A) NaN Sydney Basin NaN NaN NaN NaN NaN 19474 2021 11 8 2021-11-08T00:00:00Z Occurrence OCCURRENCE PRESENT male NaN NaN NaN True
27965 fffa5afb-2388-4ec2-937c-d73c104352d3 NaN https://biodiversity.org.au/afd/taxa/c584f24b-... Litoria peronii NaN Litoria peronii species Peron's Tree Frog Animalia Chordata Amphibia Anura Hylidae Litoria Litoria peronii NaN dr14760 NaN NaN NaN NaN CC-BY-NC 4.0 (Int) NaN NaN NaN -33.688807 151.003557 NaN -33.688807 151.003557 NaN 11.51 Australia New South Wales The Hills Shire (A) NaN Sydney Basin NaN NaN NaN NaN NaN 24985 2019 11 16 2019-11-16T00:00:00Z Occurrence OCCURRENCE PRESENT male NaN NaN NaN True
27966 fffb30c7-cee4-4d5d-8c36-b15721ac4565 NaN https://biodiversity.org.au/afd/taxa/c584f24b-... Litoria peronii NaN Litoria peronii species Peron's Tree Frog Animalia Chordata Amphibia Anura Hylidae Litoria Litoria peronii NaN dr14760 NaN NaN NaN NaN CC-BY-NC 4.0 (Int) NaN NaN NaN -33.325000 151.365000 NaN -33.325000 151.365000 NaN 50.23 Australia New South Wales Wyong (A) NaN Sydney Basin NaN NaN NaN NaN NaN 27386 2020 10 21 2020-10-21T00:00:00Z Occurrence OCCURRENCE PRESENT male NaN NaN NaN True
27967 fffba153-a597-4ed2-a325-8f9d3e567ae9 NaN https://biodiversity.org.au/afd/taxa/c584f24b-... Litoria peronii NaN Litoria peronii species Peron's Tree Frog Animalia Chordata Amphibia Anura Hylidae Litoria Litoria peronii NaN dr14760 NaN NaN NaN NaN CC-BY-NC 4.0 (Int) NaN NaN NaN -33.496942 150.745086 NaN -33.496942 150.745086 NaN 10.00 Australia New South Wales Hawkesbury (C) NaN Sydney Basin NaN NaN NaN NaN NaN 32768 2021 9 18 2021-09-18T00:00:00Z Occurrence OCCURRENCE PRESENT male NaN NaN NaN True
27968 fffd964f-475f-4a9d-9763-5654fa842aee NaN https://biodiversity.org.au/afd/taxa/c584f24b-... Litoria peronii NaN Litoria peronii species Peron's Tree Frog Animalia Chordata Amphibia Anura Hylidae Litoria Litoria peronii NaN dr14760 NaN NaN NaN NaN CC-BY-NC 4.0 (Int) NaN NaN NaN -30.034025 153.189456 NaN -30.034025 153.189456 NaN 4.74 Australia New South Wales Coffs Harbour (C) NaN NSW North Coast NaN NaN NaN NaN NaN 808334 2021 10 23 2021-10-23T00:00:00Z Occurrence OCCURRENCE PRESENT male NaN NaN NaN True
[27969 rows x 55 columns]
Make a map
It’s time to make our map!
In order to draw our map of New South Wales, we’ll download a shapefile of the latest state and territory boundaries from the Australian Bureau of statistics. Download the “States and Territories - 2021 - Shapefile” zip file, and save the zip file in the same folder you are coding in.
Let’s load our States and Territories shapefile with read_file() and save it as states. Then, we will filter the shapefile to New South Wales and quickly plot it (specifying that the edges are black, the inside is white, and the figure size is 12 x 6 inches).
from matplotlib import pyplot as plt
import geopandas as gpd
# Load Australian state and territory boundaries
states = gpd.read_file("STE_2021_AUST_GDA94.shp")
# Filter to New South Wales and plot
states[states["STE_NAME21"] == "New South Wales"].plot(edgecolor = "#5A5A5A", linewidth = 0.5, facecolor = "white", figsize = (12,6))We will also set the Coordinate References System (CRS), which determines how our points are oriented on the spherical globe when drawn as a flat surface. The projection of ALA data is EPSG:4326 (also known as “WGS84”). Setting the CRS allows us to make sure the points of our data align correctly with our shapefile.
states = states.to_crs(4326)Now, we will add species observations to our map. First, we will plot our reprojected shapefile. Then, we will overlay a scatter plot using decimalLongitude as your x axis and decimalLatitude as your y axis. We’ll set the colour (c) and adjust the alpha to make our points partially transparent.
states[states["STE_NAME21"] == "New South Wales"].plot(edgecolor = "#5A5A5A", linewidth = 0.5, facecolor = "white", figsize = (12,6))
plt.scatter(frogs['decimalLongitude'],frogs['decimalLatitude'], c = "#6fab3f", alpha = 0.5)For some final touches (to make the map prettier), we can add a title and remove the border.
states[states["STE_NAME21"] == "New South Wales"].plot(edgecolor = "#5A5A5A", linewidth = 0.5, facecolor = "white", figsize = (12,6))
plt.scatter(frogs['decimalLongitude'],frogs['decimalLatitude'], c = "#6fab3f", alpha = 0.5, label = "Litoria peronii")
plt.title("Peron's tree frog\nFrogID observations in New South Wales since 2018",fontsize=19)
plt.axis('off')(137.5269341495, 160.13694686050002, -38.293657100000004, -27.674188899999997)
To save your plot in your current folder, you can use:
plt.savefig("perons_tree_frog_nsw.png")Final thoughts
We hope this post has helped make the basic steps of making a map simple and easy to understand. For more advanced mapping in Python, check out our ALA Labs article on how to map invasive species.
Expand for session info
-----
galah 0.6.0
geopandas 0.14.1
matplotlib 3.8.2
natsort 8.4.0
pandas 2.1.3
session_info 1.0.0
-----
Python 3.12.0 (tags/v3.12.0:0fb18b0, Oct 2 2023, 13:03:39) [MSC v.1935 64 bit (AMD64)]
Windows-10-10.0.19045-SP0
-----
Session information updated at 2023-12-08 16:52
Download data
Peron’s Tree frog is one of the most recorded frog species in the Atlas of Living Australia. Growing up to 7cm in length, it is well-known for its eyes which often look like they have a black cross on them!
Left: Litoria peronii (Giverny CC-BY-NC 4.0 (Int), Middle: Litoria peronii (debtaylor142 CC-BY-NC 4.0 (Int)), Right: Litoria peronii (Ernst Weiher, iNaturalist CC-BY-NC 4.0 (Int))
First, let’s load some packages.
library(galah)
library(ggplot2)
library(sf)
library(here)Search for taxa
When trying to download data about any species or clade, we can search using search_taxa(). It’s recommended to use search_taxa() to check whether a taxonomic search returns what you were expecting (even if you know the scientific name)! We can check taxonomic information about Peron’s tree frog with search_taxa(), which returns extra details about the species when a match is found.
search_taxa("Litoria peronii")# A tibble: 1 × 15
search_term scientific_name scientific_name_autho…¹ taxon_concept_id rank
<chr> <chr> <chr> <chr> <chr>
1 Litoria peronii Litoria peronii (Tschudi, 1838) https://biodive… spec…
# ℹ abbreviated name: ¹scientific_name_authorship
# ℹ 10 more variables: match_type <chr>, kingdom <chr>, phylum <chr>,
# class <chr>, order <chr>, family <chr>, genus <chr>, species <chr>,
# vernacular_name <chr>, issues <chr>
Search for fields
Next, we can search for fields and field IDs for filtering our query. In this case, we are interested in filtering to a specific year, state/territory and data resource.
We can start by searching for any fields containing the word “year” using search_all().
search_all(fields, "year")# A tibble: 8 × 3
id description type
<chr> <chr> <chr>
1 year Year fields
2 raw_year Year (unprocessed) fields
3 endDayOfYear End Day Of Year fields
4 startDayOfYear Start Day Of Year fields
5 occurrenceYear Date (by decade) fields
6 raw_endDayOfYear <NA> fields
7 raw_startDayOfYear <NA> fields
8 namePublishedInYear Name Published In Year fields
We can do the same kind of search to find fields with information of australian states/territories and data resource names.
search_all(fields, "states")# A tibble: 5 × 3
id description type
<chr> <chr> <chr>
1 cl2013 ASGS Australian States and Territories fields
2 cl22 Australian States and Territories fields
3 cl927 States including coastal waters fields
4 cl10925 PSMA States (2016) fields
5 cl110925 PSMA States - Abbreviated (2016) fields
search_all(fields, "resource")# A tibble: 8 × 3
id description type
<chr> <chr> <chr>
1 resourceID Resource ID fields
2 dataResourceUid Dataset fields
3 dataResourceName Dataset fields
4 relatedResourceID Related Resource ID fields
5 raw_dataResourceUid Dataset (unprocessed) fields
6 raw_dataResourceName Dataset (unprocessed) fields
7 relationshipOfResource Relationship Of Resource fields
8 resourceRelationshipID Resource Relationship ID fields
If you are ever uncertain which field ID to choose, you can use show_values() to see what possible values are within a field. For example, let’s see what values are in field ID cl22.
search_all(fields, "cl22") |>
show_values()• Showing values for 'cl22'.
# A tibble: 11 × 1
cl22
<chr>
1 New South Wales
2 Victoria
3 Queensland
4 South Australia
5 Western Australia
6 Northern Territory
7 Tasmania
8 Australian Capital Territory
9 Unknown1
10 Coral Sea Islands
11 Ashmore and Cartier Islands
We can also search for a value using search_values(), which might be handy to check that “FrogID” is a value in dataResourceName.
search_all(fields, "dataResourceName") |>
search_values("FrogID")! Search returned 2 matched fields.
• Showing values for 'dataResourceName'.
# A tibble: 0 × 1
# ℹ 1 variable: dataResourceName <chr>
Download observations
Now we are ready to build our query to download observations of Peron’s tree frog since 2018 in New South Wales by FrogID.
First, let’s find the number of records that match our query. This is good practice before downloading occurrence records because you can check exactly how many records you are intending to download (and avoid an accidentally massive download)!
We’ll use atlas_counts() to download record counts, specifying the taxon using galah_identify(), and narrowing the year range, state/territory and data resource using galah_filter().
galah_call() |> # Begin a query
galah_identify("Litoria peronii") |> # Peron's tree frog
galah_filter(year >= 2018, # since 2018
cl22 == "New South Wales", # in New South Wales
dataResourceName == "FrogID") |> # by FrogID
atlas_counts() # Download record counts# A tibble: 1 × 1
count
<int>
1 27647
Now we can use atlas_occurrences() to download occurrence records, which returns each observation’s location coordinates and event date.
You will need to first provide a registered email with the ALA using galah_config() before retrieving records.
galah_config(email = "your-email-here")frogs <- galah_call() |>
galah_identify("Litoria peronii") |>
galah_filter(year >= 2018,
cl22 == "New South Wales",
dataResourceName == "FrogID") |>
atlas_occurrences()
frogs# A tibble: 27,647 × 8
recordID scientificName taxonConceptID decimalLatitude decimalLongitude
<chr> <chr> <chr> <dbl> <dbl>
1 0008c41d-fd35… Litoria peron… https://biodi… -33.2 152.
2 000c1c20-bec3… Litoria peron… https://biodi… -33.0 150.
3 000e46ad-9ace… Litoria peron… https://biodi… -31.3 149.
4 001229c0-4c48… Litoria peron… https://biodi… -33.7 150.
5 0014b8ff-ddd5… Litoria peron… https://biodi… -33.4 151.
6 00183dd1-c9cd… Litoria peron… https://biodi… -36.6 150.
7 002088e5-3a73… Litoria peron… https://biodi… -32.1 150.
8 002108e1-9933… Litoria peron… https://biodi… -33.7 151.
9 00251c30-9dfd… Litoria peron… https://biodi… -34.3 151.
10 00259fce-87db… Litoria peron… https://biodi… -30.5 153.
# ℹ 27,637 more rows
# ℹ 3 more variables: eventDate <dttm>, occurrenceStatus <chr>,
# dataResourceName <chr>
Make a map
It’s time to make our map!
In order to draw our map of New South Wales, we’ll download a shapefile of the latest state and territory boundaries from the Australian Bureau of Statistics. Download the “States and Territories - 2021 - Shapefile” zip file, and save the zip file in the same folder you are coding in.
Let’s load our States and Territories shapefile with read_file() and save it as states. Then, we will filter the shapefile to New South Wales and quickly plot it to check it plots correctly (specifying that the border is grey, and the inside is white).
# Load Australian state and territory boundaries
states <- st_read(here("STE_2021_AUST_GDA94.shp"),
quiet = TRUE)
# Filter to New South Wales
nsw <- states |>
filter(STE_NAME21 == "New South Wales")
# Plot
ggplot() +
geom_sf(data = nsw,
colour = "grey60",
fill = "white")We will also set the Coordinate References System (CRS), which determines how our points are oriented on the spherical globe when drawn as a flat surface. The projection of ALA data is EPSG:4326 (also known as “WGS84”). Setting the CRS allows us to make sure the points of our data align correctly with our shapefile.
nsw <- nsw |>
st_transform(crs = st_crs(4326))Now, we will add species observations to our map. First, we will plot our reprojected shapefile. Then, we will overlay a scatter plot using decimalLongitude as your x axis and decimalLatitude as your y axis. We’ll set the colour and adjust the alpha to make our points partially transparent.
ggplot() +
geom_sf(data = nsw,
colour = "grey60",
fill = "white") +
geom_point(data = frogs,
aes(x = decimalLongitude,
y = decimalLatitude),
colour = "#6fab3f",
alpha = 0.5,
size = 1.1)For some final touches (to make the map prettier), we can add a centred title and add a minimal theme.
ggplot() +
geom_sf(data = nsw,
colour = "grey60",
fill = "white") +
geom_point(data = frogs,
mapping = aes(x = decimalLongitude,
y = decimalLatitude),
colour = "#6fab3f",
alpha = 0.5,
size = 1.1) +
labs(title = "Peron's tree frog",
subtitle = "FrogID observations in New South Wales since 2018") +
theme_void() +
theme(
plot.title = element_text(hjust = 0.5), # horizontally centre
plot.subtitle = element_text(hjust = 0.5) # horizontally centre
)To save your plot in your current folder, you can use:
ggsave("map_perons-tree-frog.png",
dpi = 320)Final thoughts
We hope this post has helped make the basic steps of making a map simple and easy to understand. For more advanced mapping in R, check out our ALA Labs articles on exploring dingo observations and how to make a choropleth map with multiple colour scales.
Expand for session info
Warning: package 'sessioninfo' was built under R version 4.3.2
─ Session info ───────────────────────────────────────────────────────────────
setting value
version R version 4.3.1 (2023-06-16 ucrt)
os Windows 10 x64 (build 19045)
system x86_64, mingw32
ui RTerm
language (EN)
collate English_Australia.utf8
ctype English_Australia.utf8
tz Australia/Sydney
date 2023-12-08
pandoc 2.12 @ C:/Users/KEL329/ANACON~1/Scripts/ (via rmarkdown)
─ Packages ───────────────────────────────────────────────────────────────────
package * version date (UTC) lib source
galah * 2.0.0 2023-11-20 [1] CRAN (R 4.3.1)
ggplot2 * 3.4.4 2023-10-12 [1] CRAN (R 4.3.1)
here * 1.0.1 2020-12-13 [1] CRAN (R 4.3.2)
htmltools * 0.5.7 2023-11-03 [1] CRAN (R 4.3.2)
sessioninfo * 1.2.2 2021-12-06 [1] CRAN (R 4.3.2)
sf * 1.0-14 2023-07-11 [1] CRAN (R 4.3.2)
[1] C:/Users/KEL329/R-packages
[2] C:/Users/KEL329/AppData/Local/Programs/R/R-4.3.1/library
─ Python configuration ───────────────────────────────────────────────────────
python: C:/Users/KEL329/OneDrive - CSIRO/Documents/ALA/Github/ala-labs/.venv/Scripts/python.exe
libpython: C:/Users/KEL329/AppData/Local/Programs/Python/Python312/python312.dll
pythonhome: C:/Users/KEL329/OneDrive - CSIRO/Documents/ALA/Github/ala-labs/.venv
version: 3.12.0 (tags/v3.12.0:0fb18b0, Oct 2 2023, 13:03:39) [MSC v.1935 64 bit (AMD64)]
Architecture: 64bit
numpy: C:/Users/KEL329/OneDrive - CSIRO/Documents/ALA/Github/ala-labs/.venv/Lib/site-packages/numpy
numpy_version: 1.26.2
NOTE: Python version was forced by VIRTUAL_ENV
──────────────────────────────────────────────────────────────────────────────